การเปลี่ยนจากแมโครแบบซีไปสู่ตัวเลขชนิดปลอดภัยในซีพลัส แสดงถึงการเปลี่ยนแปลงเชิงพื้นฐานด้านความสะดวกในการใช้งานภาษา ซึ่งช่วยแก้ไขปัญหา "ข้อผิดพลาดของค่า NULL" ซึ่งความคลุมเครือของแมโครค่าศูนย์ทำให้เกิดข้อผิดพลาดทางตรรกะโดยไม่มีเสียงเตือน
1. การล้มเหลวของการเลือกฟังก์ชันที่มีการโอเวอร์โหลด
ในมาตรฐานเก่า (ซีพลัส98) NULL มักจะถูกกำหนดเป็น 0. เมื่อถูกส่งไปยังฟังก์ชันที่มีการโอเวอร์โหลด คอมไพเลอร์จะตีความว่า NULL เป็นจำนวนเต็ม ซึ่งสามารถเห็นได้จาก:
std::cout << "NULL เป็นจำนวนเต็ม";
2. แนวทางแก้ไขด้วยคำสั่ง nullptr
ซีพลัส11 ได้นำเสนอ nullptr, คำสั่งที่มีประเภท std::nullptr_t. แตกต่างจากแมโคร ไม่สามารถแปลงแบบแฝงไปเป็นชนิดจำนวนเต็ม (ยกเว้น bool) จึงทำให้แน่ใจได้ว่าจะเลือกฟังก์ชันเฉพาะสำหรับตัวชี้เท่านั้น
3. การเชื่อมโยงและการทำงานร่วมกัน
ซีพลัสสมัยใหม่ต้องการ extern "C" เพื่อป้องกันการเปลี่ยนชื่อเมื่อเชื่อมกับโค้ดซี (เช่น คอมไพล์ด้วย gcc). การคงความปลอดภัยด้านชนิดของตัวชี้ที่ขอบเขตดังกล่าวมีความสำคัญมาก
$$\text{std::nullptr\_t} \neq \text{int}$$